package cn.alusiaor.common.util;


import org.apache.commons.lang3.StringUtils;

/**
 * @author zhuzhiping
 * @date 2019/12/11
 * @description 功能描述
 */
public class SensitiveInfoUtils {

    /**
     * [姓名] 只显示第一个汉字，其他隐藏为星号<例子：李**>
     *
     * @param fullName
     * @return
     */
    public static String chineseName(String fullName) {
        if (StringUtils.isBlank(fullName)) {
            return "";
        }
        String name = StringUtils.left(fullName, 1);
        return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
    }

    /**
     * [身份证号] 前三位，后四位，其他隐藏。 共计18位或者15位。<例子：513*************5762>
     *
     * @param idCardNum
     * @return
     */
    public static String idCardNum(String idCardNum) {
        if (StringUtils.isBlank(idCardNum)) {
            return "";
        }
        return StringUtils.left(idCardNum, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(idCardNum, 4),StringUtils.length(idCardNum), "*"), "***"));

    }

    /**
     * [手机号码] 前三位，后四位，其他隐藏<例子:138******1234>
     *
     * @param num
     * @return
     */
    public static String mobilePhone(String num) {
        if (StringUtils.isBlank(num)) {
            return "";
        }
        return StringUtils.left(num, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(num, 4),StringUtils.length(num), "*"), "***"));
    }

    /**
     * [银行卡号] 前六位，后四位，其他用星号隐藏每位1个星号<例子:6222600**********1234>
     *
     * @param cardNum
     * @return
     */
    public static String bankCard(String cardNum) {
        if (StringUtils.isBlank(cardNum)) {
            return "";
        }
        return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));
    }

    /***
     * @Description: 原数据中间数据脱敏
     * @Date: 2020/1/19-13:44
     * @Param value: 原数据
     * @Param leftStrLength: 原数据左侧保留字符位数
     * @Param rightStrLength: 原数据右侧保留字符位数
     * @Param chr: 隐藏符  默认为(*)
     * @return: java.lang.String
     */
    public static String getSensitiveStrCenter(String originValue, int leftStrLength, int rightStrLength, String chr) {
        if (StringUtils.isBlank(originValue)) {
            return originValue;
        }
        if (StringUtils.isBlank(chr)) {
            chr = "*";
        }
        String rmove = StringUtils.rightPad(chr, leftStrLength, chr);
        return StringUtils.left(originValue, leftStrLength).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(originValue, rightStrLength), StringUtils.length(originValue), chr), rmove));
    }

    /***
     * @Description: 原数据右侧数据脱敏
     * @Date: 2020/1/19-14:15
     * @Param originValue: 原数据
     * @Param rightStrLength: 原数据左侧保留字符位数
     * @Param chr:隐藏符  默认为(*)
     * @return: java.lang.String
     */
    public static String getSensitiveStrRight(String originValue, int leftStrLength, String chr) {
        if (StringUtils.isBlank(originValue)) {
            return originValue;
        }
        if (StringUtils.isBlank(chr)) {
            chr = "*";
        }
        return StringUtils.rightPad(StringUtils.left(originValue, leftStrLength), StringUtils.length(originValue), chr);
    }

    /***
     * @Description: 原数据左侧数据脱敏
     * @Date: 2020/1/19-14:15
     * @Param originValue: 原数据
     * @Param rightStrLength: 原数据右侧保留字符位数
     * @Param chr: 隐藏符  默认为(*)
     * @return: java.lang.String
     */
    public static String getSensitiveStrLeft(String originValue, int rightStrLength, String chr) {
        if (StringUtils.isBlank(originValue)) {
            return originValue;
        }
        if (StringUtils.isBlank(chr)) {
            chr = "*";
        }
        return StringUtils.leftPad(StringUtils.right(originValue, rightStrLength), StringUtils.length(originValue), chr);
    }
}